[DÚVIDA] Fzer busca em arquivo

1. [DÚVIDA] Fzer busca em arquivo

Emanuel
_EFS

(usa Slackware)

Enviado em 30/08/2011 - 10:33h

Bom dia comunidade VOL,

Estou com a seguinte dúvida em arquivo: estou fazendo um programa que faz um cadastro. Esses dados estão em uma struct. Estou usando também uma lista encadeada. Quando vou fazer um cadastro minha main() chama uma função de cadastro e a medida que faço a leitura de um dado, uso um fwrite para imprimir la no arquivo. Até ai tudo bem, mas caso eu faça 100 registros por exemplo e queira alterar o registro 39, essa função de registrar não foi passada a ela como argumento a struct, por isso eu não estou conseguindo usar fseek(); para fazer a busca.
Alguém sabe como posso fazer a busca de uma determinada struct usando fseek, nesta função?

Desde já agradeço a compreenção de todos, segue abaixo o código.



#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct teste
{
char nome[80];
int num;
struct teste *proximo;
}tteste;

int t(tteste **cabeca);

int w(tteste *cabeca);

int main()
{
tteste a;
tteste *cabeca=NULL;
tteste *noatual;
t(&cabeca);
w(cabeca);
noatual=cabeca;
while(noatual!=NULL)
{
cabeca =noatual->proximo;
free(noatual);
noatual=cabeca;
}
return(0);
}
int t(tteste **cabeca)
{
FILE *p;
tteste *noatual,*novono;
char nome1[80];
int num1;
p=fopen("a.txt","a+");
printf("Nome: ");
fflush(stdin);fgets(nome1,80,stdin);
fwrite(&nome1,sizeof(nome1),1,p);
printf("\nNumero: ");
scanf("%d",&num1);
//fwrite(&num1,sizeof(num1),1,p);//fflush(stdin);
fprintf(p,"%d",num1);
fputs("\n",p);
fclose(p);
if(*cabeca==NULL)
{
*cabeca = (tteste *) malloc(sizeof(tteste));
strcpy((*cabeca)->nome,nome1);
(*cabeca)->num=num1;
(*cabeca)->proximo=NULL;
}
else
{
noatual=*cabeca;
while(noatual->proximo!=NULL)
noatual=noatual->proximo;
novono= (tteste *) malloc(sizeof(tteste));
strcpy(novono->nome,nome1);
novono->num=num1;
novono->proximo=NULL;
noatual->proximo=novono;
}
return(0);
}

int w(tteste *noatual)
{
while(noatual != NULL)
{
printf("Nome: %s Numero: %d",noatual->nome,noatual->num);
noatual=noatual->proximo;
}
return(0);
}


  






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts